home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power Programmierung
/
Power-Programmierung (Tewi)(1994).iso
/
magazine
/
dbms_mag
/
9108
/
bench2.aug
< prev
next >
Wrap
Text File
|
1991-07-19
|
4KB
|
173 lines
Listing 2
USE Benchmark
go
drop procedure AG_XACT4
go
CREATE PROCEDURE AG_XACT4 (
/*-------------------------------------------*/
/* */
/* TRANSACTION 4: Address Change */
/* */
/*-------------------------------------------*/
@FirstName varchar(12) = NULL,
@LastName varchar(12) = NULL,
@LineOne varchar(32) = NULL,
@LineTwo varchar(32) = NULL,
@City varchar(32) = NULL,
@State varchar(3) = NULL,
@Zipcode varchar(9) = NULL)
AS BEGIN
DECLARE
@AddressID int,
@Country varchar(3),
@OldAddress int,
@PersonID int,
@SubAddress int
SELECT @Country = 'USA'
/*-----------------------------------------*/
/* Conversion of blank strings to NULL's */
/*-----------------------------------------*/
IF (@FirstName = '')
SELECT @FirstName = NULL
IF (@LastName = '')
SELECT @LastName = NULL
IF (@LineOne = '')
SELECT @LineOne = NULL
IF (@LineTwo = '')
SELECT @LineTwo = NULL
IF (@City = '')
SELECT @City = NULL
IF (@State = '')
SELECT @State = NULL
IF (@Zipcode = '')
SELECT @Zipcode = NULL
/*------------------------*/
/* Get a new AddressID */
/*------------------------*/
BEGIN TRANSACTION
UPDATE Seqnos
SET LastUsed = LastUsed + 1
WHERE TableName = 'Addresses'
SELECT @AddressID = LastUsed
FROM Seqnos
WHERE TableName = 'Addresses'
COMMIT TRANSACTION
/*------------------------*/
/* Zipcode Verification */
/*------------------------*/
BEGIN TRANSACTION
IF @Zipcode IS NOT NULL
IF NOT EXISTS (SELECT *
FROM ZipCodes
WHERE Country = @Country
AND ZipCode = @Zipcode)
BEGIN
ROLLBACK TRANSACTION
RAISERROR 20401 "Invalid Zipcode."
RETURN
END
/*------------------*/
/* Insert Address */
/*------------------*/
INSERT INTO Addresses (ID,LineOne,LineTwo,ZipCode,Country)
VALUES (@AddressID,@LineOne,@LineTwo,@Zipcode,@Country)
IF @@ROWCOUNT = 0
BEGIN
SELECT @AddressID = ID
FROM Addresses
WHERE LineOne = @LineOne
AND ((LineTwo = @LineTwo) OR (LineTwo IS NULL))
AND ZipCode = @Zipcode
IF @@ROWCOUNT = 0
BEGIN
ROLLBACK TRANSACTION
RAISERROR 20402 "Insert Addresses failed."
RETURN
END
END
/*-----------------------*/
/* Look up old address */
/*-----------------------*/
SELECT @PersonID = ID,@OldAddress = HomeAddr
FROM People
WHERE LastName = @LastName AND FirstName = @FirstName
IF @@ROWCOUNT = 0
BEGIN
ROLLBACK TRANSACTION
RAISERROR 20403 "Person not found."
RETURN
END
/*----------*/
/* Move it. */
/*----------*/
UPDATE People
SET HomeAddr = @AddressID
WHERE ID = @PersonID
IF @@ROWCOUNT = 0
BEGIN
ROLLBACK TRANSACTION
RAISERROR 20404 "Updating People failed."
RETURN
END
COMMIT TRANSACTION
/*----------------------------------*/
/* See if we can delete the old one */
/*----------------------------------*/
IF @OldAddress IS NOT NULL
BEGIN
BEGIN TRANSACTION
DELETE FROM Addresses
WHERE ID = @OldAddress
AND NOT EXISTS (SELECT *
FROM People
WHERE HomeAddr = @OldAddress)
AND NOT EXISTS (SELECT *
FROM Companies
WHERE HQaddr = @OldAddress)
AND NOT EXISTS (SELECT *
FROM CompanyPeople
WHERE WorkAddr = @OldAddress)
AND NOT EXISTS (SELECT *
FROM Subscriptions
WHERE Address = @OldAddress)
COMMIT TRANSACTION
END
END
go
GRANT ALL ON AG_XACT4 TO PUBLIC
go